# -*- coding: utf-8 -*-            
# @Time : 2022/10/29 16:01
# @Author  : lining
# @FileName: demo4.py
"""
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

使用栈
栈：先进先出，可以使用list实现

"""
def isvalid(x):
    """
    :param x: 输入的字符串
    :return:
    """
    a = []
    # 先确定x不是），],}开头
    for i in [')',']','}']:
        if x.startswith(i):
            print('开头错误')
            return False
    # 如果是左边的就入栈，如果是右边的就判断栈顶是否是对应的左边
    for i in x:
        if i in ['(', '[', '{']:
            a.append(i)
            print(f'a入栈{i}')
        else:
            b = a[-1]
            if (i == ')' and a.pop() != '(') or (i == ']' and a.pop() != '[') or (i == '}' and a.pop() != '{'):
                print(f'i为{i}, a.pop为{b}')
                print(False)
                return False
    if len(a) == 0:
        print(True)
        return True

my_list = "(]"
isvalid(my_list)



